// 区别1：定义类型范围不同
// interface 只能定义对象类型或接口当名字的函数类型
// type可以定义任何类型，包括基础类型、联合类型、交叉类型、元组
interface Car {
    brandNo: string
}
interface Plane {
    No: string
    brandNo: string
}
type TypVeChile = Car | Plane
let vechile: TypVeChile = { brandNo: '奔驰', No: 'A11001' }

// 区别2：接口可以extends一个或者多个接口或类实现一个或者多个接口，也可以继承type，但type类型没有继承功能，但一般接口继承类和type的应用场景很少见


// 区别3：用type交叉类型&可以让类型中的成员合并成一个新的type类型，但接口不能交叉合并


// 区别4：接口可以合并声明
// 定义两个相同名称的接口会合并声明，定义两个同名的type会出现编译错误

interface Error {
    name:string
}

interface Error{
    message:string,
    stack?:string
}

// 接口合并
let error: Error = {
    name: '张三',
    message: '错误信息'
}